package tp.pr5.mv.window;


import java.awt.GridLayout;

import javax.swing.JPanel;
import javax.swing.JTextArea;





import tp.pr5.mv.CPU;
import tp.pr5.mv.Controller;
import tp.pr5.mv.Memory;
import tp.pr5.mv.Observable;
import tp.pr5.mv.OperandStack;

@SuppressWarnings("serial")
public class EntradaSalidaMaquina extends JPanel {
	
	/* Panel que disponde un panel para la zona de la pila y la memoria de la TPMV y otro panel correspondiente
	 * a la entrada y salida de los programas de la maquina virtual
	 * */
	
	private PilaYMemoriaPanel pilaYmemoria;
	private EntradaSalidaPanel entradaSalida;

	
	public EntradaSalidaMaquina(Controller controller, Observable<CPU.Observer> observableCPU, Observable<OperandStack.Observer> observableStack, Observable<Memory.Observer> observableMem) {
		
		super( new GridLayout(2,1) );
		init(controller, observableCPU, observableStack, observableMem);
	}
	
	
	public void init(Controller controller, Observable<CPU.Observer> observableCPU, Observable<OperandStack.Observer> observableStack, Observable<Memory.Observer> observableMem) {
		
		pilaYmemoria = new PilaYMemoriaPanel(controller, observableCPU, observableStack, observableMem);
		add(pilaYmemoria);
		entradaSalida = new EntradaSalidaPanel();
		add(entradaSalida);
	}

	// Metodos que devuelven JTextArea de la pila, la entrada y la salida de la maquina virtual
	// Además también se devuelve el modelo de la tabla necesario para actualizar la tabla de la memoria
	

	public JTextArea getTextoSalida() {
		return entradaSalida.getTextoSalida();
	}
	

	public JTextArea getTextoEntrada() {
		return entradaSalida.getTextoEntrada();
	}

	
	
	
}
